/**
 * API统一入口
 * 使用策略模式管理数据源
 */

import SinaDataSource from './sinaDataSource.js';

// 当前数据源实例
let currentDataSource = null;

// 数据源类型枚举
const DataSourceType = {
	SINA: 'sina'
};

/**
 * 初始化数据源
 * @param {String} type - 数据源类型
 */
function initDataSource(type = DataSourceType.SINA) {
	switch (type) {
		case DataSourceType.SINA:
			currentDataSource = new SinaDataSource();
			break;
		default:
			currentDataSource = new SinaDataSource();
	}
}

/**
 * 获取当前数据源
 * @returns {StockDataSource} 数据源实例
 */
function getDataSource() {
	if (!currentDataSource) {
		initDataSource();
	}
	return currentDataSource;
}

/**
 * 切换数据源
 * @param {String} type - 数据源类型
 */
function switchDataSource(type) {
	initDataSource(type);
}

/**
 * 搜索股票
 * @param {String} keyword - 搜索关键词
 * @returns {Promise<Object>} 返回股票列表
 */
function searchStock(keyword) {
	return getDataSource().searchStock(keyword);
}

/**
 * 获取K线数据
 * @param {Object} params - 请求参数
 * @param {String} params.stockCode - 股票代码
 * @param {String} params.period - 周期
 * @param {Number} params.count - 数据条数
 * @param {String} params.adjust - 复权方式
 * @param {String} params.startDate - 开始日期
 * @param {String} params.endDate - 结束日期
 * @returns {Promise<Object>} 返回K线数据
 */
function getKLineData(params) {
	const { period } = params;
	
	// 判断是分时K线还是其他K线
	if (['m5', 'm15', 'm30', 'm60'].includes(period)) {
		return getDataSource().getMinuteKLine(params);
	} else {
		return getDataSource().getOtherKLine(params);
	}
}

export default {
	DataSourceType,
	initDataSource,
	switchDataSource,
	searchStock,
	getKLineData
};

